package Util;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Map;
import java.util.stream.Collectors;

public class Tools {

    /**
     * MD5加密方法
     *
     */
    public static String getMD5(String input) {
        try {
            // 获取 MD5 加密算法实例
            MessageDigest md = MessageDigest.getInstance("MD5");

            // 将输入字符串转换为字节数组
            byte[] inputBytes = input.getBytes();

            // 计算 MD5 哈希值
            byte[] hashBytes = md.digest(inputBytes);

            // 将哈希值转换为十六进制字符串
            StringBuilder sb = new StringBuilder();
            for (byte b : hashBytes) {
                sb.append(String.format("%02x", b)); // 使用 %02x 将每个字节表示为两位十六进制数
            }

            return sb.toString();
        } catch (NoSuchAlgorithmException e) {
            // 当算法不可用时，处理异常
            System.out.println("MD5 算法不可用：" + e.getMessage());
            return null;
        }
    }

    /**
     * 将内容保存为html文件
     *
     */
    public static void saveToHtmlFile(String content, String filePath) {
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
            writer.write(content);
            System.out.println("HTML文件保存成功: " + filePath);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 使用系统默认的浏览器打开HTML文件
     *
     */
    public static void openHtmlFile(String filePath) {
        try {
            // 使用系统默认的浏览器打开HTML文件
            String os = System.getProperty("os.name").toLowerCase();

            if (os.contains("win")) {
                Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + filePath);
            } else if (os.contains("nix") || os.contains("nux") || os.contains("mac")) {
                Runtime.getRuntime().exec("xdg-open " + filePath);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    /**
     * map转 "&"符号 string   a=1&b=2
     *
     * @param MapData
     * @return strData
     */
    public static String MaptoStr(Map<String, String> MapData){
        String strData = MapData.entrySet()
                .stream()
                .map(entry -> entry.getKey() + "=" + entry.getValue())
                .collect(Collectors.joining("&"));
        return strData;
    }


}
